/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.patpro.modelo.DAO.persistencia;

import com.patpro.modelo.DAO.interfaces.ProfesorInterfaz;
import com.patpro.modelo.javabeans.Persona;
import com.patpro.modelo.javabeans.Profesor;
import java.util.Date;
import java.util.List;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

/**

 */
public class ProfesorJDBCPersistence implements ProfesorInterfaz{

    private JdbcTemplate plantilla;

    public JdbcTemplate getPlantilla() {
        return plantilla;
    }

    public void setPlantilla(JdbcTemplate plantilla) {
        this.plantilla = plantilla;
    }

    public int actualizarProfesor(Profesor profesor) {
       //actualizar persona
       String sql = (profesor.getId_persona()>0)
                            ?"update t_persona set dni=?,nombres=?,apellidos=?,telefonos =?,direccion=?,email=?,fechaNacimiento=?  where T_Persona_ID="+profesor.getId_persona()
                            :"insert into t_persona(dni,nombres,apellidos,telefonos,direccion,email,fechaNacimiento) values(?,?,?,?,?,?,?) ";
       plantilla.update (sql,
                           new Object[] {
                                 profesor.getDni(),
                                 profesor.getNombres(),
                                 profesor.getApellidos(),
                                 profesor.getTelefonos(),
                                 profesor.getDireccion(),
                                 profesor.getEmail(),
                                 new java.sql.Date(new Date(profesor.getFecha_nacimiento()).getTime())
                                 
                              });

       //ultimo id de persona
        sql = "select T_Persona_ID AS id_persona from t_persona order by T_Persona_ID desc LIMIT 1 ";
        Persona ultimoidPersona = (Persona) plantilla.queryForObject(
                sql, new Object[]{},
                new BeanPropertyRowMapper(Persona.class));

        //insertar el usuario
         if(profesor.getId_persona()==0){
             plantilla.update ("insert into usertable (userid,password,T_Persona_ID) values(?,?,?)",
                           new Object[] {
                                 profesor.getDni(),
                                 profesor.getDni(),
                                 ultimoidPersona.getId_persona()
                              });
             plantilla.update ("insert into grouptable (userid,groupid) values(?,?)",
                           new Object[] {
                                 profesor.getDni(),
                                 "grupo_profesor"
                              });
         }

        //actualizar profesor
         sql = (profesor.getId_persona()>0)
                            ?"update t_profesor set direccionWeb=?,experienciaProfesional=?  where T_Persona_ID=?"
                            :"insert into t_profesor(direccionWeb,experienciaProfesional,T_Persona_ID) values(?,?,?) ";
	 return plantilla.update (sql,
                           new Object[] {
                                 profesor.getDireccionWeb(),
                                 profesor.getExperienciaProfesional(),
                                 (profesor.getId_persona()>0)?profesor.getId_persona():ultimoidPersona.getId_persona()
                              });
    }

    public int eliminarProfesor(Profesor profesor) {
        String sql = "delete from  t_profesor WHERE T_Persona_ID = ?";
	plantilla.update(sql,profesor.getId_persona());

        sql = "delete from  t_persona WHERE T_Persona_ID = ?";
	return plantilla.update(sql,profesor.getId_persona());
    }

    public List<Profesor> listarProfesores() {
        String sql = "SELECT"+
                     "   t_persona.T_Persona_ID as id_persona,"+
                     "   t_persona.dni,"+
                     "   t_persona.nombres,"+
                     "   t_persona.apellidos,"+
                     "   t_persona.telefonos,"+
                     "   t_persona.direccion,"+
                     "   t_persona.email,"+
                     "   DATE_FORMAT(t_persona.fechaNacimiento, '%m/%d/%Y') as fecha_nacimiento,"+
                     "   t_profesor.direccionWeb,"+
                     "   t_profesor.experienciaProfesional,"+
                     "   concat(concat(t_persona.apellidos,' '),t_persona.nombres) as nombres_completo"+
                     "   from "+
                     "   t_persona inner join t_profesor on t_persona.T_Persona_ID= t_profesor.T_Persona_ID order by t_persona.apellidos asc";
        return plantilla.query(
                        sql,new BeanPropertyRowMapper(Profesor.class));
    }

    public Profesor buscarProfesor(int id_profesor) {
         String sql = "SELECT"+
                     "   t_persona.T_Persona_ID as id_persona,"+
                     "   t_persona.dni,"+
                     "   t_persona.nombres,"+
                     "   t_persona.apellidos,"+
                     "   t_persona.telefonos,"+
                     "   t_persona.direccion,"+
                     "   t_persona.email,"+
                     "   DATE_FORMAT(t_persona.fechaNacimiento, '%m/%d/%Y') as fecha_nacimiento,"+
                     "   t_profesor.direccionWeb,"+
                     "   t_profesor.experienciaProfesional"+
                     "   from "+
                     "   t_persona inner join t_profesor on t_persona.T_Persona_ID= t_profesor.T_Persona_ID where t_profesor.T_Persona_ID=?";
        List<Profesor> profesores =  plantilla.query(
                        sql,new Object[]{id_profesor},new BeanPropertyRowMapper(Profesor.class));
        return (profesores.size()>0)?(Profesor)profesores.get(0) :null;
    }

    public Profesor buscarProfesorPorUsuario(String id_usuario) {
        String sql = "SELECT"+
                     "   t_persona.nombres,"+
                     "   t_persona.apellidos,"+
                     "   concat(concat(t_persona.apellidos,' '),t_persona.nombres) as nombres_completo,"+
                     "   t_persona.T_Persona_ID as id_persona"+
                     "   FROM"+
                     "   usertable"+
                     "   INNER JOIN t_persona ON usertable.T_Persona_ID = t_persona.T_Persona_ID"+
                     "   where usertable.userid=?";
        List<Profesor> profesores =  plantilla.query(
                        sql,new Object[]{id_usuario},new BeanPropertyRowMapper(Profesor.class));
        return (profesores.size()>0)?(Profesor)profesores.get(0) :null;
    }

    

}
